home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / e / amigae30a_fr.lha / AmigaE30f / Sources / Pd / blockinput.e < prev    next >
Encoding:
Text File  |  1994-12-02  |  3.5 KB  |  149 lines

  1. /* blockinput.e (de la page 207 du livre sur les bibliothèques, modifié pour le
  2.  * E par Trey Van Riper [jvanriper@uncavx.unca.edu])
  3.  */
  4.  
  5. /* blockinput.e -- programme pour demonstrer comment bloquer les entrées d'une
  6.  * fenêtre en utilisant les requêtes, et comment affichier un busy pointer.
  7.  */
  8.  
  9. OPT OSVERSION=37
  10.  
  11. MODULE 'exec/types','intuition/intuition','exec/ports','exec/memory',
  12.        'utility/tagitem'
  13.  
  14. /*
  15.  * Autant que je sache, le E ne vous llaisse pas mettre des données directement
  16.  * dans la mémoire Chip, donc vous devez les CopyMem de la mémoire Fast.  Donc....
  17.  */
  18.  
  19. DEF chippointer
  20.  
  21. /*
  22.  * beginWait()
  23.  *
  24.  * Efface la requête avec InitRequester. Ca met la requête  avec une margeur=0
  25.  * hauteur = 0, gauche = 0, haut = 0; en fait, tout est à zéro.
  26.  * Cette requête va simplement bloquer les entrées à la fenêtre tant que EndResques
  27.  * n'ets pas appelé.
  28.  *
  29.  * Le pointeur est mis sur un busy pointer de 4 couleurs, avec de bons offsets.
  30.  */
  31.  
  32. PROC beginWait(win, waitRequest)
  33.  
  34.  InitRequester(waitRequest)
  35.  IF Request(waitRequest, win)
  36.   SetPointer(win,chippointer, 16, 16, -6, 0)
  37.   SetWindowTitles(win,'Busy - Input Blocked', Not(0))
  38.   RETURN TRUE
  39.  ELSE
  40.   RETURN FALSE
  41.  ENDIF
  42.  
  43. ENDPROC
  44.  
  45. /*
  46.  * endWait()
  47.  *
  48.  * Routine pour remettre à zéro le pointeur au défaut système, et enlève la
  49.  * requête installée avec beginWait().
  50.  */
  51.  
  52. PROC endWait(win, waitRequest)
  53.  
  54.  ClearPointer(win)
  55.  EndRequest(waitRequest, win)
  56.  SetWindowTitles(win,'Not Busy', Not(0))
  57.  
  58.  
  59. ENDPROC
  60.  
  61. /*
  62.  * processIDCMP()
  63.  *
  64.  * Attend que l'utilisateur ferme la fenêtre.
  65.  */
  66.  
  67. PROC processIDCMP (wintmp)
  68.  
  69.  DEF done, msg:PTR TO intuimessage, class, myreq:requester, tick_count,
  70.      temp:PTR TO mp,win:PTR TO window
  71.  
  72.  done:=FALSE
  73.  win:=wintmp
  74.  IF beginWait(win, myreq)
  75.   /*
  76.    * Insérer du code ici pour qu'une fenêtre agissent sur la requête.
  77.    */
  78.  
  79.   /* On compte à rebours les INTUITICKS, qui viennet environ toutes les
  80.    * 1/10 de secondes.  On garde le busy pointeur pour environ 3 secondes.
  81.    */
  82.    tick_count := 30
  83.  ENDIF
  84.  temp := win.userport
  85.  WHILE Not(done)
  86.   Wait(Shl(1,temp.sigbit))
  87.   WHILE NIL <> (msg := GetMsg(win.userport))
  88.    class := msg.class
  89.    ReplyMsg(msg)
  90.    SELECT class
  91.     CASE IDCMP_CLOSEWINDOW
  92.      done := TRUE
  93.     CASE IDCMP_INTUITICKS
  94.      IF tick_count>0
  95.       DEC tick_count
  96.       IF tick_count = 0 THEN endWait(win,myreq)
  97.      ENDIF
  98.    ENDSELECT
  99.   ENDWHILE
  100.  ENDWHILE
  101. ENDPROC
  102.  
  103. PROC main()
  104.  DEF win:PTR TO window,waitpointer
  105.  
  106. waitpointer:=[$0000, $0000,
  107.  
  108.               $0400, $07C0,
  109.               $0000, $07C0,
  110.               $0100, $0380,
  111.               $0000, $07E0,
  112.               $07C0, $1FF8,
  113.               $1FF0, $3FEC,
  114.               $3FF8, $7FDE,
  115.               $3FF8, $7FBE,
  116.               $7FFC, $FF7F,
  117.               $7EFC, $FFFF,
  118.               $7FFC, $FFFF,
  119.               $3FF8, $7FFE,
  120.               $3FF8, $7FFE,
  121.               $1FF0, $3FFC,
  122.               $07C0, $1FF8,
  123.               $0000, $07E0,
  124.  
  125.               $0000, $0000]:INT
  126.  
  127. IF chippointer:=AllocVec(72,MEMF_CHIP)
  128.  CopyMemQuick(waitpointer,chippointer,72)
  129. ENDIF
  130.  
  131.  IF win:=OpenWindowTagList(NIL,
  132.                    [WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_INTUITICKS,
  133.                    WA_ACTIVATE, TRUE,
  134.                    WA_WIDTH, 320,
  135.                    WA_HEIGHT, 100,
  136.                    WA_CLOSEGADGET, TRUE,
  137.                    WA_DRAGBAR, TRUE,
  138.                    WA_DEPTHGADGET, TRUE,
  139.                    WA_SIZEGADGET, TRUE,
  140.                    WA_MAXWIDTH, Not(0),
  141.                    WA_MAXHEIGHT, Not(0)])
  142.  processIDCMP(win)
  143.  CloseWindow(win)
  144.  ENDIF
  145.  
  146. IF chippointer THEN FreeVec(chippointer)
  147.  
  148. ENDPROC
  149.